// #include <iostream>
// #include <set>
// #include <map>
// #include <unordered_map>
// #include <unordered_set>
// #include <vector>
// #include <string>
// #include <ctime>
// using namespace std;

// namespace bit
// {
// 	template<size_t N>
// 	class bitset
// 	{
// 	public:
// 		bitset()
// 		{
// 			_bit.resize(N / 8 + 1, 0);
// 		}
// 		void set(size_t x)//设置值
// 		{
// 			size_t i = x / 8;
// 			size_t j = x % 8;
// 			_bit[i] |= (1 << j);
// 			// 00000000——第i个char位图
// 			// 00000001——0...1...0——1左移j位
// 			// 0...1...0——最终或等的结果，将数字x设置为存在1
// 		}
// 		void reset(size_t x)//删除值
// 		{
// 			size_t i = x / 8;
// 			size_t j = x % 8;
// 			_bit[i] &= (~(1 << j));
// 		}
// 		bool test(size_t x)//测试值
// 		{
// 			size_t i = x / 8;
// 			size_t j = x % 8;
// 			return _bit[i] & (1 << j);//整型提升无所谓，结果0就是不存在，结果非0就存在
// 		}
// 	private:
// 		vector<char> _bit;
// 	};
// 	void test_bitset()
// 	{
// 		//bitset<100> bs1;

// 		//bitset<-1> bs2;
// 		bitset<0xffffffff> bs2;

// 		bs2.set(10);
// 		bs2.set(10000);
// 		bs2.set(8888);

// 		cout << bs2.test(10) << endl;
// 		cout << bs2.test(10000) << endl;
// 		cout << bs2.test(8888) << endl;
// 		cout << bs2.test(8887) << endl;
// 		cout << bs2.test(9999) << endl << endl;

// 		bs2.reset(8888);
// 		bs2.set(8887);

// 		cout << bs2.test(10) << endl;
// 		cout << bs2.test(10000) << endl;
// 		cout << bs2.test(8888) << endl;
// 		cout << bs2.test(8887) << endl;
// 		cout << bs2.test(9999) << endl;
// 	}
// }

#include <iostream>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <string>
#include <ctime>
using namespace std;

namespace bit
{
    template <size_t N>
    class bitset
    {
    public:
        bitset()
        {
            _v.resize(N / 32 + 1);
        }
        void set(size_t x)
        {
            size_t i = x / 32;
            size_t j = x % 32;
            _v[i] |= (1 << j);
        }
        void erase(size_t x)
        {
            size_t i = x / 32;
            size_t j = x % 32;
            _v[i] &= ~(1 << j);
        }
        bool find(size_t x)
        {
            size_t i = x / 32;
            size_t j = x % 32;
            return _v[i] & (1 << j);
        }

    private:
        vector<int> _v;
    };

    template <size_t N>
    class two_bit
    {
    public:
        void set(size_t x)
        {
            if (!b1.find(x) && !b2.find(x))
            {
                b2.set(x);
            }
            else if (!b1.find(x) && b2.find(x))
            {
                b1.set(x);
                b2.erase(x);
            }
            else if (b1.find(x) && !b2.find(x))
            {
                b2.set(x);
            }
        }
        bool find(size_t x)
        {
            if (!b1.find(x) && !b2.find(x))
                cout << "0次" << endl;
            if (!b1.find(x) && b2.find(x))
                cout << "1次" << endl;
            if (b1.find(x) && !b2.find(x))
                cout << "2次" << endl;
            if (b1.find(x) && b2.find(x))
                cout << "3次及以上" << endl;
        }

    private:
        bit::bitset<N> b1;
        bit::bitset<N> b2;
    };
};

int main()
{
    // using bit::bitset;
    using namespace bit;
    // two_bit<0xffffffff> b;
    two_bit<500000> b;

    b.set(10);
    cout << b.find(10) << endl;
    return 0;
}